package alg;
import java.util.Arrays;

/**
 *给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
 * 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
 * 你可以假设除了整数 0 之外，这个整数不会以零开头。
 */

/*
思路：通过下标取数组最后一个元素并命名为num；
     让num+1
     num+1后判断是否大于9；如果大于9则让num前面一个元素加1,并让num为0；
     如果小于9则直接返回。
     特殊情况：{9},{9,9,9,9}等。需要另外判断
 */

public class PlusOne {
    public static void main(String[] args) {
        int[] arr = {9,9,9,9,8};

        System.out.println(Arrays.toString(pOne(arr)));
    }

//  方法1
    public static int[] pO(int[] digits){
        int index = digits.length-1;
        int num = digits[index]+1;
        digits[index] = num;
        while(num>9 && index>0){
            digits[index] = 0;
            num = digits[index-1]+1;
            index--;
            digits[index] = num;
        }
        if (digits[0]==10){
            digits = new int[digits.length+1];
            digits[0] = 1;
            for (int i = 1; i < digits.length; i++) {
                digits[i] = 0;
            }
            
        }
        return digits;
    }

//    方法二
    public static  int[] pOne(int[] digits){
        for (int i = digits.length-1; i >= 0 ; i--) {
            if (digits[i]<9){
                digits[i] += 1;
                return digits;
            }
            digits[i] = 0;
        }
        digits = new int[digits.length+1];
        digits[0] = 1;
        return digits;
    }

}

